<?php

/**
 * AdminController
 * 
 * @author  Ricardo Simão
 * @version 1.1
 * 
 * 
 */

class AdminController extends App_BaseController {
	
	/**
	 * Msgs de erro
	 */
	const ERR_FORM = "Ocorreu um erro. Os dados não foram inseridos correctamente.";
	
	/**
	 * Formulários
	 *
	 * @var Zend_Form
	 */
	protected $form;
	
	/**
	 * Parametros de configuração
	 *
	 * @var mixed
	 */
	protected $config;
	
	/**
	 * Parametros de configuração
	 *
	 * @var Zend_Config_Ini
	 */
	protected $params;
	
	/**
	 * Filtra os valores que vêm dos formulários
	 *
	 * @var mixed
	 */
	protected $filterValues;
	
	/**
	 * Nome dos servidores
	 *
	 * @var string
	 */
	protected $webhost;
	
	/**
	 * Adapatdor para diferentes tipos de BD
	 *
	 * @var string
	 */
	protected $adapter;
	
	/**
	 * ip ou dns do servidor
	 *
	 * @var string
	 */
	protected $host;
	
	/**
	 * Nome do utilizador
	 *
	 * @var string
	 */
	protected $username;
	
	/**
	 * Palavra passe do utilizador
	 *
	 * @var string
	 */
	protected $password;
	
	/**
	 * Nome da BD
	 *
	 * @var string
	 */
	protected $dbname;
	
	/**
	 * Valores a escrever no ficheiro de configuração
	 *
	 * @var App_ConfigWriter
	 */
	protected $configWriter;
	
	/**
	 * Email do utilizador
	 *
	 * @var string
	 */
	protected $email;
	
	/**
	 * Nome completo do utilizador
	 *
	 * @var string
	 */
	protected $real_name;
	
	/**
	 * Se o utilizador faz parte dos administradores
	 *
	 * @var int
	 */
	protected $admin;
	
	/**
	 * Cria um novo utilizador
	 *
	 * @var App_userService
	 */
	protected $createNewUser;
	
	/**
	 * IP os dns do servidor
	 *
	 * @var string
	 */
	protected $ip_dns;
	
	
	
	public function indexAction() {
	
	}
	
	/**
	 * Insere os novos utilizadores na base de dados.
	 * 
	 * @return Zend_form
	 *
	 */
	
	public function userAction() {
		$form = App_Forms_Newuser::getForm ();
		$this->view->form = $form;
	}
	
	/**
	 * Esta função tem 2 partes
	 * 1 - Lê o ficheiro de configuração e guarda num array os valores
	 * 2 - Passa o formulário da base de dados de Login para a VIEW, se existirem valores no ficheiro de config, passa-os para o formulário
	 * 
	 * @return Zend_Form
	 */
	
	public function logintableAction() {
		
		//Lê o ficheiro de configuração
		$config = new Zend_Config_Ini ( self::INI_FILE, 'login' );
		$params = array ('webhost' => $config->webhost, 'adapter' => $config->database->adapter, 'host' => $config->database->params->host, 'username' => $config->database->params->username, 'password' => $config->database->params->password, 'dbname' => $config->database->params->dbname );
		
		/**
		 * Mostra o formulário de criação / actualização base de dados Login
		 * Se existerem valores no fich de config, passa-os para o formulário
		 */
		$form = App_Forms_LoginTableParams::getForm ();
		$form->populate ( $params );
		$this->view->form = $form;
	
	}
	
	/**
	 * Verifica se o formulário é válido e escreve os valores para o ficheiro de configuração.
	 *
	 * @return void
	 */
	
	public function newlogindbAction() {
		
		$form = App_Forms_LoginTableParams::getForm ();
		
		if ($form->isValid ( $_POST )) {
			$filterValues = new Zend_Filter_StripTags ( );
			$webhost = $filterValues->filter ( $this->_request->getPost ( 'webhost' ) );
			$adapter = $filterValues->filter ( $this->_request->getPost ( 'adapter' ) );
			$host = $filterValues->filter ( $this->_request->getPost ( 'host' ) );
			$username = $filterValues->filter ( $this->_request->getPost ( 'username' ) );
			$password = $filterValues->filter ( $this->_request->getPost ( 'password' ) );
			$dbname = $filterValues->filter ( $this->_request->getPost ( 'dbname' ) );
			
			//Escreve os valores no ficheiro de configuração
			$config = new App_ConfigWriter ( self::INI_FILE );
			$configWriter = $config->setConfig ();
			$configWriter->login->webhost = $webhost;
			$configWriter->login->database->adapter = $adapter;
			$configWriter->login->database->params->host = $host;
			$configWriter->login->database->params->username = $username;
			$configWriter->login->database->params->password = $password;
			$configWriter->login->database->params->dbname = $dbname;
			
			$config->write ( $configWriter );
		
		} else {
			
			// Se o formulário não estiver bem preenchido retorna o formulário com os respectivos erros.
			$this->view->custom_errors = self::ERR_FORM;
			$this->view->errors = $form->getMessages ();
			$this->view->form = $form;
		}
	}
	
	/**
	 * Cria um novo usuário
	 * 
	 * @return void
	 *
	 */
	
	public function newuserAction() {
		
		$form = App_Forms_Newuser::getForm ();
		//Verifica se o formulário é enviado por POST
		if ($form->isValid ( $_POST )) {
			//Filtra a informção que vem do formulário
			$filtervalues = new Zend_Filter_StripTags ( );
			$username = $filtervalues->filter ( $this->_request->getPost ( 'username' ) );
			$password = $filtervalues->filter ( $this->_request->getPost ( 'password' ) );
			$email = $filtervalues->filter ( $this->_request->getPost ( 'email' ) );
			$real_name = $filtervalues->filter ( $this->_request->getPost ( 'real_name' ) );
			$admin = $filtervalues->filter ( $this->_request->getPost ( 'admin' ) );
			
			$createNewUser = new App_UserService ( );
			$createNewUser->newUser ( $username, $password, $email, $real_name, $admin );
		
		} else {
			
			// Se o formulário não estiver bem preenchido retorna o formulário com os respectivos erros.
			$this->view->custom_errors = self::ERR_FORM;
			$this->view->errors = $form->getMessages ();
			$this->view->form = $form;
		}
	
	}
	
	/**
	 * Formulário de configuração do servidor de email
	 * 
	 * @return Zend_Form
	 */
	
	public function mailsrvAction() {
		
		$config = new Zend_Config_Ini ( self::INI_FILE, 'mail_server' );
		$params = array ('ip_dns' => $config->ip_dns, 'username' => $config->username, 'password' => $config->password );
		
		/**
		 * Mostra o formulário de criação / actualização servidor de email
		 */
		$form = App_Forms_Emailsrv::getForm ();
		$form->populate ( $params );
		$this->view->form = $form;
	
	}
	
	/**
	 * Escreve a configuração do servidor de email no ficheiro de configuração
	 *
	 * @return void
	 */
	
	public function newmailsrvAction() {
		
		$form = App_Forms_Emailsrv::getForm ();
		if ($form->isValid ( $_POST )) {
			
			$filtervalues = new Zend_Filter_StripTags ( );
			$ip_dns = $filtervalues->filter ( $this->_request->getPost ( 'ip_dns' ) );
			$username = $filtervalues->filter ( $this->_request->getPost ( 'username' ) );
			$password = $filtervalues->filter ( $this->_request->getPost ( 'password' ) );
			
			//Escreve os valores no ficheiro de configuração
			$config = new App_ConfigWriter ( self::INI_FILE );
			$configWriter = $config->setConfig ();
			$configWriter->mail_server->ip_dns = $ip_dns;
			$configWriter->mail_server->username = $username;
			$configWriter->mail_server->password = $password;
			
			$config->write ( $configWriter );
		
		}
	
	}
	
	/**
	 * Formulário de configuração da tabela das tarefas
	 *
	 * @return Zend_Form
	 */
	
	public function tasksdbAction() {
		
		//Lê o ficheiro de configuração
		$config = new Zend_Config_Ini ( self::INI_FILE, 'tasks' );
		$params = array ('webhost' => $config->webhost, 'adapter' => $config->database->adapter, 'host' => $config->database->params->host, 'username' => $config->database->params->username, 'password' => $config->database->params->password, 'dbname' => $config->database->params->dbname );
		
		/**
		 * Mostra o formulário de criação / actualização base de dados Login
		 * Se existerem valores no fich de config, passa-os para o formulário
		 */
		$form = App_Forms_TasksTableParams::getForm();
		$form->populate ( $params );
		$this->view->form = $form;
	
	}
	
	/**
	 * Verifica se o formulário é válido e escreve os valores para o ficheiro de configuração.
	 * @return void
	 */
	
	public function newtasksdbAction() {
		
		$form = App_Forms_TasksTableParams::getForm ();
		
		if ($form->isValid ( $_POST )) {
			$filterValues = new Zend_Filter_StripTags ( );
			$webhost = $filterValues->filter ( $this->_request->getPost ( 'webhost' ) );
			$adapter = $filterValues->filter ( $this->_request->getPost ( 'adapter' ) );
			$host = $filterValues->filter ( $this->_request->getPost ( 'host' ) );
			$username = $filterValues->filter ( $this->_request->getPost ( 'username' ) );
			$password = $filterValues->filter ( $this->_request->getPost ( 'password' ) );
			$dbname = $filterValues->filter ( $this->_request->getPost ( 'dbname' ) );
			
			//Escreve os valores no ficheiro de configuração
			$config = new App_ConfigWriter ( self::INI_FILE );
			$configWriter = $config->setConfig ();
			$configWriter->login->webhost = $webhost;
			$configWriter->login->database->adapter = $adapter;
			$configWriter->login->database->params->host = $host;
			$configWriter->login->database->params->username = $username;
			$configWriter->login->database->params->password = $password;
			$configWriter->login->database->params->dbname = $dbname;
			
			$config->write ( $configWriter );
		
		} else {
			
			// Se o formulário não estiver bem preenchido retorna o formulário com os respectivos erros.
			$this->view->custom_errors = self::ERR_FORM;
			$this->view->errors = $form->getMessages ();
			$this->view->form = $form;
		}
	}
}